﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;
using Telerik.WinControls.UI;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class EntregaRetorno2 : OwnZForm
    {
        public EntregaRetorno2()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
        }
        private tbVenda Venda { get; set; }
        private tbEntrega Entrega { get; set; }

        private bool alterado;

        List<listaPedidosRetorno> listaEntrega;
        private void EntregaRetorno2_Load(object sender, EventArgs e)
        {
            CarregaFuncionarios();
            cboFuncionarios.DropDownListElement.AutoCompleteSuggest.SuggestMode = SuggestMode.Contains;
            AtualizaGrid();

            Contexto.MainForm.Cursor = Cursors.Arrow;
            alterado = false;
        }

        private void MostraCombo(object sender, EventArgs e)
        {
            if (rbMotorista.Checked)
            {
                if (alterado)
                {
                    DialogResult dr;
                    dr = MessageBox.Show("Todas as alterações serão perdidas. Continuar?", "Baixa", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                    {
                        cboFuncionarios.Visible = true;
                        cboFuncionarios.SelectedIndex = 0;
                        AtualizaGrid();
                        alterado = false;
                    }
                }
                else
                {
                    cboFuncionarios.Visible = true;
                    cboFuncionarios.SelectedIndex = 0;
                    AtualizaGrid();
                    alterado = false;
                }
            }
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTodos.Checked)
            {
                if (alterado)
                {
                    DialogResult dr;
                    dr = MessageBox.Show("Todas as alterações serão perdidas. Continuar?", "Baixa", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                    {
                        cboFuncionarios.Visible = false;
                        AtualizaGrid();
                        alterado = false;
                    }
                    else
                    {
                        rbMotorista.Checked = true;
                    }
                }
                else
                {
                    cboFuncionarios.Visible = false;
                    AtualizaGrid();
                    alterado = false;
                }
            }
        }

        private void AtualizaGrid()
        {
            Cursor = Cursors.WaitCursor;

            listaEntrega = new List<listaPedidosRetorno>();
            listaPedidosRetorno listaItem = new listaPedidosRetorno();
            //Venda = (tbVenda)Contexto.Db.tbVendas.Where(p => p.statusVenda == "E");
            foreach (var item in Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").ToList())
            {
                listaItem = new listaPedidosRetorno();
                listaItem.data = item.dtVenda.ToString("dd/MM/yyyy");
                listaItem.idPedido = item.idVenda;
                listaItem.numPedido = Contexto.Db.tbVendas.First(p => p.idVenda == item.idVenda).numeroVenda.ToString();
                listaItem.idCliente = item.idCliente;
                listaItem.cliente = Contexto.Db.tbClientes.First(p => p.idCliente == item.idCliente).desCliente;
                listaItem.valorTotal = item.valorVenda;
                listaItem.qtdeCaixa = 0;
                listaItem.Motorista = Contexto.Db.tbFuncionarios.First(p => p.idFuncionario == item.idMotorista).desNomeFuncionario;
                if (rbTodos.Checked)
                    listaEntrega.Add(listaItem);
                else
                {
                    if (item.idMotorista == cboFuncionarios.SelectedValue.ParaInt())
                        listaEntrega.Add(listaItem);
                }
            }

            gvPedidos.DataSource = listaEntrega;

            Cursor = Cursors.Arrow;
        }
        private void CarregaFuncionarios()
        {
            cboFuncionarios.DataSource = Contexto.Db.tbFuncionarios.Where(p => p.flgEntrega == true);
            cboFuncionarios.ValueMember = "idFuncionario";
            cboFuncionarios.DisplayMember = "desNomeFuncionario";
        }

        private void cboFuncionarios_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            AtualizaGrid();
        }

        private void gvPedidos_CommandCellClick(object sender, EventArgs e)
        {
            string s = string.Empty;

            List<listaPedidosRetorno> lista = (List<listaPedidosRetorno>)gvPedidos.DataSource;

            listaPedidosRetorno item = lista.Find(p => p.idPedido == ((listaPedidosRetorno)gvPedidos.SelectedRows[0].DataBoundItem).idPedido);

            FrmRetornoDetalhes frm = new FrmRetornoDetalhes();
            frm.ValorDevido = item.valorTotal;
            frm.ShowDialog();

            if (frm.DialogResult == DialogResult.OK)
            {
                if (frm.bTotal)
                {
                    item.Total = true;
                    item.Retorno = frm.ValorRetorno;
                }
                else
                {
                    item.Parcial = true;
                    item.Retorno = Convert.ToDecimal(frm.ValorRetorno).ToString("C2");
                }
                item.Marcar = true;
                alterado = true;
            }

            gvPedidos.DataSource = null;
            gvPedidos.DataSource = lista;

        }

        private void rbTodos_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("Validation");
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            bool todos = true;
            List<listaPedidosRetorno> lista = (List<listaPedidosRetorno>)gvPedidos.DataSource;
            if (lista.Count == 0)
            {
                MessageBox.Show("Não existem pedidos selecionados");
                return;
            }

            foreach (listaPedidosRetorno item in lista)
            {
                if (item.Marcar == false)
                {
                    todos = false;
                }
            }

            if (!todos)
            {
                DialogResult dr = MessageBox.Show("Existem itens sem estar marcado.\nDeseja continuar?", "Baixa", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dr == DialogResult.No)
                    return;
            }

            foreach (listaPedidosRetorno item in lista)
            {

                //atualizar tbVendas
                Venda = Contexto.Db.tbVendas.First(p => p.idVenda == item.idPedido);
                if (item.Total)
                    Venda.statusVenda = "F";
                else
                    Venda.statusVenda = "P";

                Contexto.Db.SaveChanges();

                //atualizar tbEntrega
                Entrega = Contexto.Db.tbEntregas.First(p => p.idVenda == item.idPedido);
                Entrega.flgAtivo = false;
                Entrega.dtRetorno = DateTime.Now;

                Contexto.Db.SaveChanges();
            }
            alterado = false;

            AtualizaGrid();
        }

        private void cmdAtualizar_Click(object sender, EventArgs e)
        {
            AtualizaGrid();
        }

        private void btnBaixarTodos_Click(object sender, EventArgs e)
        {
            listaEntrega = (List<listaPedidosRetorno>)gvPedidos.DataSource;
            foreach (listaPedidosRetorno item in listaEntrega)
            {
                item.Marcar = true;
                item.Total = true;
                item.Retorno = item.valorTotal.ToString("C2");
            }

            gvPedidos.DataSource = null;
            gvPedidos.DataSource = listaEntrega;
        }

    }
}